#include <string>
#include "node.h"
#include "return.h"
#include "empty.h"

namespace AST {

    // Construtor
    Return::Return(Node* result) {
        // Configuração
        this->_setResult(result);
    };

    // Construtor
    Return::Return() {};

    // Configuração de Resultado
    Return* Return::_setResult(Node* result) {
        // Configuração
        this->_result = result;
        // Encadeamento
        return this;
    };

    // Captura de Resultado
    Node* Return::getResult() {
        // Inicializado?
        if (this->_result == NULL) {
            this->_setResult(new Empty());
        }
        // Apresentação
        return this->_result;
    };

    // Sobrescrita
    std::string Return::toString(int indent) {
        // Apresentação
        return this->getIndentSpaces(indent)
            + "Return\n"
            + this->getResult()->toString(indent + 1);
    };

};

